package com.augurit.common.base.action;

import java.util.ArrayList;
import java.util.List;

import org.springside.modules.orm.Page;
import org.springside.modules.web.ServletUtils;

import com.augurit.common.base.extmodel.ExtResult;
import com.augurit.common.base.extmodel.base.ITreeNode;
import com.augurit.common.base.form.BaseForm;
import com.augurit.common.util.ExtUtils;

/**
 * Ext的Action基类，提供对Ext组件支持
 */
public class ExtBaseAction extends ProjBaseAction{
	
	/**
	 * 将Form对象转换为Ext的FormPanel组件所需的JSON字符串
	 * @param form
	 */
	public static String extGetFormJson(final BaseForm form) {
		
		ExtResult result = new ExtResult(true, false);
		
		List<BaseForm> list = new ArrayList(1);
		list.add(form);
		result.setResult(list);
		
		return getJsonString(result);
	}
	
	/**
	 * 将Form对象转换为Ext的FormPanel组件所需的JSON字符串
	 * @param form
	 * @param headers
	 */
	public static void extRenderFormJson(final BaseForm form) {
		renderJson(extGetFormJson(form));
	}
	
	/**
	 * 将带树结构的对象转换为JSON字符串
	 * 注意：方法已经对树结构对象作去掉空列表处理
	 * @param treeNode
	 * @param headers
	 */
	public static void extRenderTreeNodeJson(final ITreeNode treeNode) {
		
		ExtResult result = new ExtResult(true, false);
		
		List<ITreeNode> list = new ArrayList();
		list.add(treeNode);
		result.setResult(list);
		
		renderJson(ExtUtils.removeEmptyChildrenFromTreeNode(getJsonString(result)));
	}
	
	/**
	 * 将含有结果对象列表和分页信息的分页对象转换为Ext的Grid组件所需的JSON字符串
	 * @param page
	 * @param headers
	 */
	public static void extRenderGridJson(final Page page){
		renderJson(page);
	}
	
	public static void extRenderGridJson(final List list){
		extRenderListJson(list, true);
	}
	
	/**
	 * 将对象列表转换为JSON字符串
	 * 注意：方法已经对树结构对象作去掉空列表处理
	 * @param list 对象列表
	 * @param autoCount 是否需要统计对象列表数量
	 */
	public static void extRenderListJson(final List list, boolean autoCount) {
		
		String jsonString = "";
		
		//JSON字符串转换
		if(autoCount){
			ExtResult result = new ExtResult(true, true);
			result.setResult(list);
			jsonString = getJsonString(result);
		}else{
			jsonString = getJsonString(list);
		}
		
		//输出JSON字符串。如果是树结构对象，则去除空children属性的JSON字符
		if(list != null && list.size() > 0 && list.get(0) instanceof ITreeNode)
			renderJson(ExtUtils.removeEmptyChildrenFromTreeNode(jsonString));
		else
			renderJson(jsonString);
	}
	
	/**
	 * 直接返回操作成功的JSON字符串
	 */
	public static void extRenderSuccess(){
		renderJson("{\"success\":true}");
	}
	
	/**
	 * 直接返回操作成功的JSON字符串
	 */
	public static void extRenderSuccess(String msg){
		if(msg != null)
			renderJson("{success:true,msg:\"" + msg + "\"}");
		else
			extRenderSuccess();
	}
	
	/**
	 * 直接返回操作成功的JSON字符串
	 */
	public static void extRenderFailture(String msg){
		if(msg != null)
			renderJson("{success:false,msg:\"" + msg + "\"}");
		else
			extRenderFailture();
	}
	
	/**
	 * 直接返回操作失败的JSON字符串
	 */
	public static void extRenderFailture(){
		renderJson("{success:false}");
	}
	
	/**
	 * 直接返回可编辑表格组件的JSON字符串结果
	 */
	public static void extRenderEditorGridResult(final String message, final List list, final boolean autoCount){
		extRenderEditorGridResult(true, message, list, autoCount);
	}
	
	/**
	 * 直接返回可编辑表格组件的JSON字符串结果
	 */
	public static void extRenderEditorGridResult(final boolean success, final String message){
		extRenderEditorGridResult(success, message, null, false);
	}
	
	/**
	 * 直接返回可编辑表格组件的JSON字符串结果
	 */
	public static void extRenderEditorGridResult(final boolean success, final String message, final List list, boolean autoCount){
		ExtResult result = new ExtResult(success, autoCount);
		result.setMessage(message);
		result.setResult(list);
		renderJson(result);
	}
}
